Шаг 135 - О функциях Enum в VB.

Многие функции в Win32 API являются функциями обратного вызова. Например, функция перечисления дочерних окон. В эти функции обычно передается указатель на функцию которая вызывается. В VB для передачи указателя используется оператор AddressOf.

 AddressOf procedurename

Давайте используя ее и попробуем реализовать перечисления дочерних окон. Описываем функции Win32 API.

Public Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Public Declare Function EnumChildWindows Lib "user32" (ByVal hWndParent As Long, ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long

Реализуем функцию обратного вызова.

Public Function EnumWindowProc(ByVal hwnd As Long, ByVal lParam As Long) As Long
	Dim buff As String * 255
	Debug.Print "Enum"
	GetWindowText hwnd, buff, 255
	Form1.List1.AddItem buff
	EnumWindowProc = True
End Function

Вызываем ее при нажатии на кнопку на форме.

Private Sub Command1_Click()
    List1.Clear
    Dim lParam As Long
    EnumChildWindows Me.hwnd, AddressOf EnumWindowProc, lParam
End Sub

Смотрим результат

135_1.gif (3738 b)

Вообщем то сложностей не каких, достаточно правильно описать функцию обратного вызова.

Hosted by uCoz